package com.hb.B_面向对象.A_类与继承

fun main() {

}

/**
 *  场景：有些时候，我们可能需要从一个特殊的数据中来获取
 *  构造类的参数值，这时候，如果可以，定义一个额外的构造方法
 *  接收一个自定义的参数，会显得特别方便
 *
 *  假如当前我们知道鸟的生日，希望可以通过生日来得到鸟的年龄，
 *  然后创建一个Bird类的对象，一种改进的方案是在Bird类的伴生对象中
 *  定义Bird方法。
 *
 *  我们还可以像哪个Java那样新增一个构造方法来解决这个问题
 *  Kotlin也支持多构造方法的语法，然而与java的区别在于，他在
 *  多构造方法之间建立了"主从"的关系。
 * */

class Bird3{
    val age:Int=0
    val name:String


    /*
    constructor(birth:Long):this(getAgeByBirth(birth)){

    }
    1. 通过constructor方法定义了一个新的构造方法，他被称为从构造方法，
    相应地，我们熟悉的在类外部定义的构造方法被称为主构造方法，每个类
    可最多存在一个主构造方法和多个从构造方法，如果主构造方法存在注解
    或者可见性修饰符，也必须像从构造方法一样加上constructor关键字

    比如：internal public Bird @inject constructor(age:Int){}

    2. 每个从构造方法由两部分组成，一部分是对其他构造方法的委托，另一部分是由花括号包裹的代码
    块。执行顺序上会先执行委托的方法，然后执行自身代码块的逻辑。通过this关键字来调用要委托的构造方法
    如果一个类存在主构造方法，那么每个从构造方法都要直接或间接的委托给他。比如，可以把从构造方法A委托给
    从构造方法B，再将从构造方法B委托给主构造方法
    */
    constructor(name:String,age:Int):this(name){

    }
    constructor(name:String){
        this.name=name
    }



}